home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.io.PrintStream;
- import java.util.Hashtable;
- import sun.tools.asm.Assembler;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.Type;
-
- public class ThisExpression extends Expression {
- LocalField field;
-
- public ThisExpression(int var1) {
- super(82, var1, Type.tObject);
- }
-
- public ThisExpression(int var1, Context var2) {
- super(82, var1, Type.tObject);
- if (var2.field.isMethod()) {
- this.field = var2.getLocalField(Constants.idThis);
- ++this.field.readcount;
- }
-
- }
-
- public long checkValue(Environment var1, Context var2, long var3, Hashtable var5) {
- if (var2.field.isStatic()) {
- var1.error(super.where, "undef.var", Constants.idThis);
- super.type = Type.tError;
- return var3;
- } else if ((var3 & 1L) == 0L) {
- var1.error(super.where, "access.inst.before.super", Constants.idThis);
- super.type = Type.tError;
- return var3;
- } else {
- super.type = var2.field.getClassDeclaration().getType();
- if (var2.field.isMethod()) {
- this.field = var2.getLocalField(Constants.idThis);
- ++this.field.readcount;
- }
-
- return var3;
- }
- }
-
- public Expression inline(Environment var1, Context var2) {
- return null;
- }
-
- public Expression inlineValue(Environment var1, Context var2) {
- if (this.field != null) {
- Expression var3 = (Expression)this.field.getValue(var1);
- if (var3 != null) {
- return var3;
- }
- }
-
- return this;
- }
-
- public Expression copyInline(Context var1) {
- ThisExpression var2 = (ThisExpression)((Node)this).clone();
- if (this.field == null) {
- var2.field = var1.getLocalField(Constants.idThis);
- ++var2.field.readcount;
- }
-
- return var2;
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- var3.add(super.where, 25, new Integer(this.field.number));
- }
-
- public void print(PrintStream var1) {
- var1.print("this#" + (this.field != null ? this.field.hashCode() : 0));
- }
- }
-